package cn.flying.cloud.flow.api;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import cn.flying.cloud.flow.model.FlowAuditVo;
import cn.flying.cloud.flow.model.FlowStartVo;

/**
 * 流程管理服务接口
 *
 * @author: admin
 * @date: 2025年05月12日 21:15
 * @version: 1.0
 */
public interface FlowServiceApi {
    /**
     * 流程启动
     *
     * @param process 参数对象
     * @return
     */
    @PostMapping("instance/start")
    String startProcess(@RequestBody FlowStartVo process);

    /**
     * 流程撤回
     *
     * @param procInstId 流程实例ID
     */
    @PostMapping("instance/cancel")
    void cancelProcess(@RequestParam("procInstId") String procInstId);

    /**
     * 删除撤回
     *
     * @param procInstId 流程实例ID
     * @param reason     删除原因
     */
    @PostMapping("instance/delete")
    void deleteProcess(@RequestParam("procInstId") String procInstId, String reason);

    /**
     * 领取任务
     *
     * @param taskId 任务ID
     * @param userId 用户ID
     */
    @PostMapping("instance/task/claim")
    void claimTask(@RequestParam("taskId") String taskId, @RequestParam("userId") String userId);

    /**
     * 完成提交任务
     *
     * @param auditVo 任务对象
     */
    @PostMapping("instance/task/complete")
    void completeTask(@RequestBody FlowAuditVo auditVo);

    /**
     * 触发任务（争对Receive Task）
     *
     * @param procInstId 流程实例ID
     * @param activityId 节点ID
     */
    @PostMapping("instance/task/trigger")
    void triggerTask(@RequestParam("procInstId") String procInstId, @RequestParam("activityId") String activityId);
}
